package cn.b.sky.mes.mm.service.impl;

import java.util.List;

import javax.annotation.Resource;

import cn.b.sky.mes.mm.dao.StorageLocationTypeDao;
import org.apache.ibatis.annotations.Param;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.interceptor.TransactionAspectSupport;

import cn.b.sky.mes.mm.model.StorageLocationType;
import cn.b.sky.mes.mm.model.condition.StorageLocationTypeCondition;
import cn.b.sky.mes.mm.service.StorageLocationTypeService;
import cn.b.sky.common.model.BatchJobReport;
import cn.b.sky.common.utils.DatabaseUtils;
import cn.b.sky.i18n.utils.LocaleResourceBundle;
import cn.b.sky.user.SecurityContextUtil;

/**
 * 
 * <strong>Title : StorageLocationTypeServiceImpl.java<br></strong>
 * <strong>Package : cn.b.sky.mes.mm.service.impl<br></strong>
 * <strong>Description : </strong>库位类型业务实现<br> 
 * <strong>Create on : 2016-2-29 下午01:40:26<br></strong>
 * <p>
 * @author zhaoxin01<br>
 * @version <strong>v1.0.0</strong><br>
 * <br>
 * <strong>修改历史:</strong><br>
 * 修改人    |    修改日期    |    修改描述<br>
 * -------------------------------------------<br>
 * <br>
 * <br>
 */
@Service("storageLocationTypeService")
public class StorageLocationTypeServiceImpl implements StorageLocationTypeService {

  private static final Logger LOG = LoggerFactory.getLogger(StorageLocationTypeServiceImpl.class);

  @Resource
  StorageLocationTypeDao storageLocationTypeDao;

  @Override
  public List<StorageLocationType> selectStorageLocationTypeList(
      StorageLocationTypeCondition storageLocationTypeCondition) {
    return storageLocationTypeDao.selectStorageLocationTypeList(storageLocationTypeCondition);
  }

  @Override
  public int selectStorageLocationTypeCount(StorageLocationTypeCondition storageLocationTypeCondition) {
    return storageLocationTypeDao.selectStorageLocationTypeCount(storageLocationTypeCondition);
  }

  @Override
  public StorageLocationType selectStorageLocationType(@Param("siteCode") String siteCode,
      @Param("storageLocationTypeCode") String storageLocationTypeCode) {
    return storageLocationTypeDao.selectStorageLocationType(siteCode, storageLocationTypeCode);
  }

  @Override
  public void insertStorageLocationType(StorageLocationType storageLocationType) {
    storageLocationTypeDao.insertStorageLocationType(storageLocationType);

  }

  @Override
  public void updateStorageLocationType(StorageLocationType storageLocationType) {
    storageLocationTypeDao.updateStorageLocationType(storageLocationType);

  }

  @Override
  public BatchJobReport deleteStorageLocationType(@Param("siteCode") String siteCode,
      @Param("storageLocationTypeCode") String storageLocationTypeCode) {
    String cause = "";
    Boolean success = true;
    try {
      storageLocationTypeDao.deleteStorageLocationType(siteCode, storageLocationTypeCode);
    } catch (Exception e) {
      LOG.error("{}", e);
      TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
      if (DatabaseUtils.isConstraintsError(e.getMessage())) {
        // 外键删除已存在提示
        cause = LocaleResourceBundle.getCommonResourceLabel(SecurityContextUtil.getSiteCode(),SecurityContextUtil.getLanguageCode(),
            "dataBaseOperationPkFail.M")
            + LocaleResourceBundle.getCommonResourceLabel(SecurityContextUtil.getSiteCode(),SecurityContextUtil.getLanguageCode(), "notDelete.M");
      } else {
        cause = e.getMessage();
      }
      success = false;
    }
    return new BatchJobReport(storageLocationTypeCode, cause, success, SecurityContextUtil.getLanguageCode(),SecurityContextUtil.getSiteCode());

  }

  @Override
  public List<StorageLocationType> selectUnLockStorageLocationTypes(String siteCode) {
    return storageLocationTypeDao.selectUnLockStorageLocationTypes(siteCode);
  }

}
